#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*
 *strlen & sizeof
 *strcpy & strncpy
 *strcat & strncat
 *strcmp & strncmp
 * */


/*
 *strlen 得到字符数组长度 不包括/0 ==>  以\0作为结束标记
 *sizeof 运算符  得到当前参数占内存空间的大小 字节个数
 * */
static void test1(void)
{
	char str[] = "hello\0abc";
	printf("%d\n",strlen(str));
	printf("%d\n",sizeof(str));


}

/*
 * 字符数组拷贝 以\0结束
 *strcpy 会越界：  dest的空间大小 小于 src的大小
 *strncpy 解决越界
 * */
static void test2(void)
{
	char str[3] =  "";
	strcpy(str,"abc\0de");
	puts(str);


}
#define STRSIZE 32
static void test2_1(void)
{
	char str[STRSIZE];
	strncpy(str,"abcde",STRSIZE);
	puts(str);

}
/*
 *字符数组连接 以\0结束  再添加新的字符数组以及\0
 *strcat 会越界
 *strncat 解决越界
 * */
static void test3(void)
{
	char str[STRSIZE] = "hello\0abc";
	
	strcat(str,"world\0eeee");
	puts(str);
}
static void test3_1(void)
{
	char str[STRSIZE] = " hello\0abc";
	strncat(str," world\0di2o1ncwioqcbwiq",STRSIZE);
	puts(str);
}

/*
 *比较字符数组的 ASCII 值
 *strcmp
 *strncmp  比较指定长度
 * */
static void test4(void)
{
	char str1[STRSIZE]= "hello";
	char str2[STRSIZE] = "helloa";
	
	printf("%d\n",strcmp(str1,str2));
	printf("%d\n",strncmp(str1,str2,5));
}
int main(void)
{
	
//	test1();
//	test2();
//	test2_1();
//	test3();
//	test3_1();
	test4();

	exit(0);
}
